package com.sqrj.phoneorder;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;


@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@MapperScan(value = "com.sqrj.phoneorder.dao")
public class PhoneorderApplication {

    public static void main(String[] args) {
        SpringApplication.run(PhoneorderApplication.class, args);
    }

//    配置http转https
//     在某配置类中添加如下内容
//
//     监听的http请求的端口,需要在application配置中添加http.port=端口号  如80
//     springboot2 写法

    @Bean
    public TomcatServletWebServerFactory servletContainer() {

        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {

            @Override

            protected void postProcessContext(Context context) {

                SecurityConstraint constraint = new SecurityConstraint();

                constraint.setUserConstraint("CONFIDENTIAL");

                SecurityCollection collection = new SecurityCollection();

                collection.addPattern("/*");

                constraint.addCollection(collection);

                context.addConstraint(constraint);

            }

        };

        tomcat.addAdditionalTomcatConnectors(httpConnector());

        return tomcat;

    }

    @Bean
    public Connector httpConnector() {

        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");

        connector.setScheme("http");

        //Connector监听的http的端口号

        connector.setPort(8272);

        connector.setSecure(false);

        //监听到http的端口号后转向到的https的端口号

        connector.setRedirectPort(443);

        return connector;

    }

    //-----------------------------------------------------------------------------
//    这里设置默认端口为443，即https的，如果这里不设置，会https和http争夺80端口
//    @Override
//    public void customize(ConfigurableEmbeddedServletContainer container) {
//        container.setPort(443);
//    }
//    -------------------------------------------------------------------------------

}

